package org.wdcode.common.util;

import java.io.Closeable;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.wdcode.common.interfaces.Close;
import org.wdcode.common.log.WdLogs;

/**
 * 关闭各种资源方法
 * @author WD
 * @since JDK6
 * @version 1.0 2009-03-04
 */
public final class CloseUtil {
	/**
	 * 关闭Closeable流数据源接口
	 * @param c 流数据源
	 */
	public final static void close(Closeable... cs) {
		// 判断不为空
		if (!CommonUtil.isEmpty(cs)) {
			try {
				// 循环关闭资源
				for (int i = 0; i < cs.length; i++) {
					// 获得Closeable
					cs[i].close();
				}
			} catch (IOException e) {
				// 打印异常
				WdLogs.error(e);
			} finally {
				// 对象置null
				cs = null;
			}
		}
	}

	/**
	 * 关闭Close流数据源接口
	 * @param c 流数据源
	 */
	public final static void close(Close... c) {
		// 判断不为空
		if (!CommonUtil.isEmpty(c)) {
			try {
				// 循环关闭资源
				for (int i = 0; i < c.length; i++) {
					// 获得Close
					c[i].close();
				}
			} catch (Exception e) {
				// 打印异常
				WdLogs.error(e);
			} finally {
				// 对象置null
				c = null;
			}
		}
	}

	/**
	 * 关闭数据库Statement接口
	 * @param stmt Statement接口
	 */
	public final static void close(Statement stmt) {
		// 判断不为空
		if (!CommonUtil.isEmpty(stmt)) {
			try {
				// 关闭资源
				stmt.close();
			} catch (SQLException e) {
				// 打印异常
				WdLogs.error(e);
			} finally {
				// 对象置null
				stmt = null;
			}
		}
	}

	/**
	 * 关闭数据库Connection接口
	 * @param conn Connection对象
	 */
	public final static void close(Connection conn) {
		// 判断不为空
		if (!CommonUtil.isEmpty(conn)) {
			try {
				// 关闭资源
				conn.close();
			} catch (SQLException e) {
				// 打印异常
				WdLogs.error(e);
			} finally {
				// 对象置null
				conn = null;
			}
		}
	}

	/**
	 * 关闭数据库ResultSet接口
	 * @param rs ResultSet对象
	 */
	public final static void close(ResultSet rs) {
		// 判断不为空
		if (!CommonUtil.isEmpty(rs)) {
			try {
				// 关闭资源
				rs.close();
			} catch (SQLException e) {
				// 打印异常
				WdLogs.error(e);
			} finally {
				// 对象置null
				rs = null;
			}
		}
	}

	/**
	 * 关闭数据库资源
	 * @param stmt Statement对象
	 * @param conn Connection对象
	 */
	public final static void close(Statement stmt, Connection conn) {
		close(null, stmt, conn);
	}

	/**
	 * 关闭数据库资源
	 * @param stmt Statement对象
	 * @param conn Connection对象
	 */
	public final static void close(ResultSet rs, Statement stmt, Connection conn) {
		// 关闭ResultSet对象
		close(rs);
		// 关闭Statement对象
		close(stmt);
		// 关闭Connection对象
		close(conn);
	}

	/**
	 * 私有构造，禁止外部实例化
	 */
	private CloseUtil() {}
}
